import os
import logging
from logging.handlers import RotatingFileHandler
from pythonjsonlogger import jsonlogger

def setup_logger(app):
    """设置日志记录器"""
    # 创建日志目录
    log_dir = app.config.get('LOGGING', {}).get('dir', 'logs')
    os.makedirs(log_dir, exist_ok=True)
    
    # 设置日志格式
    log_format = app.config.get('LOGGING', {}).get(
        'format',
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    # 设置日志级别
    log_level = app.config.get('LOGGING', {}).get('level', 'INFO')
    
    # 创建处理器
    handlers = []
    
    # 控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(logging.Formatter(log_format))
    handlers.append(console_handler)
    
    # 文件处理器
    file_handler = RotatingFileHandler(
        os.path.join(log_dir, 'app.log'),
        maxBytes=app.config.get('LOGGING', {}).get('max_size', 10485760),  # 10MB
        backupCount=app.config.get('LOGGING', {}).get('backup_count', 10)
    )
    file_handler.setFormatter(jsonlogger.JsonFormatter(log_format))
    handlers.append(file_handler)
    
    # 配置根日志记录器
    logging.basicConfig(
        level=getattr(logging, log_level),
        handlers=handlers
    )
    
    # 设置 Flask 应用的日志处理器
    app.logger.handlers = handlers
    
    # 设置 SQLAlchemy 的日志级别
    logging.getLogger('sqlalchemy').setLevel(logging.WARNING)
    
    # 记录应用启动日志
    app.logger.info('Application logging setup completed') 